﻿// 1301. C 循环.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <cmath>


using namespace std;
/*
https://www.acwing.com/problem/content/1303/


对于 C 语言的循环语句，形如：

for (variable = A; variable != B; variable += C)
  statement;
请问在 k位存储系统中循环几次才会结束。

若在有限次内结束，则输出循环次数。否则输出死循环。

输入格式
多组数据，每组数据一行四个整数 A,B,C,k。

读入以 0 0 0 0 结束。

输出格式
若在有限次内结束，则输出循环次数。

否则输出 FOREVER。

数据范围
1≤k≤32
,
0≤A,B,C<2^k
输入样例：
3 3 2 16
3 7 2 16
7 3 2 16
3 4 2 16
0 0 0 0
输出样例：
0
2
32766
FOREVER
*/

int a, b, c, k;

// 求x, y，使得ax + by = gcd(a, b)
long long exgcd(long long  a, long long b, long long& x, long long& y)
{
	if (!b)
	{
		x = 1; y = 0;
		return a;
	}
	long long d = exgcd(b, a % b, y, x);
	y -= (a / b) * x;
	return d;
}


void solve() {
	long long x=0, y=0;
	long long t = 1ll << k;
	long long d = exgcd(c, t, x, y);
	if ((b - a) % d) {
		cout << "FOREVER" << endl;
	}
	else {
		x = x * (b - a)/d;
		long long z = (1LL << k) / d;
		x = (x % z + z) % z;
		cout << x << endl;
	}

}


int main()
{
	while (cin >> a >> b >> c >> k) {
		if (0 == a && 0 == b && 0 == c && 0 == k) break;
		solve();
	}


	return 0;
}

 